package com.xutianpeng.disk.file.repository;

import com.xutianpeng.disk.file.entity.SearchFileEntity;
import com.xutianpeng.disk.mybatis.entity.PtFileEntity;
import com.xutianpeng.disk.mybatis.flexigrid.PagingEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
public interface FileDao {
    /**
     * 删除文件表的所有内容
     */
    void deleteFileAll();

    /**
     * 保存文件信息
     * @param ptFileEntityList 文件信息列表
     */
    void saveFileInfo(@Param("list") List<PtFileEntity> ptFileEntityList);

    /**
     * 查询文件列表总数量
     * @param entity 搜索条件实体
     * @return 总数量
     */
    Integer queryFileListTotal(@Param("entity") SearchFileEntity entity);

    /**
     * 文件列表分页查询
     * @param entity 搜索条件实体
     * @param paging 分页参数实体
     * @return 分页文件列表
     */
    List<PtFileEntity> queryFileInfoListByPage(
            @Param("entity") SearchFileEntity entity,
            @Param("paging") PagingEntity paging
    );

    /**
     * 根据文件唯一标识查询文件信息
     * @param fileUuid 文件唯一标识
     * @return 文件信息实体
     */
    PtFileEntity queryFileInfoById(@Param("fileUuid") String fileUuid);

    /**
     * 查询所有文件列表
     * @return 所有文件信息列表
     */
    List<PtFileEntity> queryFileListAll();

    /**
     * 将文件移至回收站（更新删除标识）
     * @param fileUuid 文件唯一标识
     */
    void updateFileToRecycle(@Param("fileUuid") String fileUuid);

    /**
     * 批量更新文件的父目录UUID（移动文件核心方法）
     * @param fileUuids 需要移动的文件UUID列表
     * @param targetFolderUuid 目标文件夹UUID
     */
    void updateParentUuids(
            @Param("fileUuids") List<String> fileUuids,
            @Param("targetFolderUuid") String targetFolderUuid
    );

    /**
     * 查询所有文件的树形结构数据（用于前端文件树展示）
     * @return 文件树形结构列表
     */
    List<PtFileEntity> queryAllFileTree();

    /**
     * 更新文件名
     * @param fileEntity 包含文件ID和新文件名的实体对象
     * @return 更新影响的行数
     */
    int updateFileName(@Param("file") PtFileEntity fileEntity);
}